{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c6cccab9",
   "metadata": {},
   "source": [
    "# NeuroMANCER Variable, Constraint, and Objective tutorial\n",
    "\n",
    "This script demonstrates how to create NeuroMANCER variables, constraints, and objectives\n",
    "allowing to formulate a broad class of constrained optimization problems.\n",
    "\n",
    "Variable is basic symbolic abstraction in NeuroMANCER allowing composition of symbolic computational graphs.\n",
    "Constraint and Objective  are used to construct custom physics-informed loss functions terms\n",
    "for subsequent gradient-based optimization of the symbolic computational graph.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "69e175b5",
   "metadata": {},
   "source": [
    "### Install (Colab only)\n",
    "Skip this step when running locally."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ab6c479e",
   "metadata": {},
   "outputs": [],
   "source": [
    "!pip install neuromancer"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "06def2bb",
   "metadata": {},
   "source": [
    "*Note: When running on Colab, one might encounter a pip dependency error with Lida 0.0.10. This can be ignored*"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b8136a23",
   "metadata": {},
   "source": [
    "### Import"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "c8a4e0f0",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "from neuromancer.constraint import variable, Objective"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a32c05b1",
   "metadata": {},
   "source": [
    "## Variable"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8e5f4d32",
   "metadata": {},
   "source": [
    "**Variable** is an abstraction that allows for the definition of constraints and objectives with some nice\n",
    "syntactic sugar. When a Variable object is called given a dictionary a pytorch tensor is returned, and when\n",
    "a Variable object is subjected to a comparison operator a Constraint is returned. Mathematical operators return\n",
    "Variables which will instantiate and perform the sequence of mathematical operations. PyTorch callables\n",
    "called with variables as inputs return variables. Variable supports binary infix operators (variable * variable, variable * numeric): +, -, *, @, **, <, <=, >, >=, ==, ^\n",
    "\n",
    "There are several ways to instantiate a variable:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "07580147",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5.0\n"
     ]
    }
   ],
   "source": [
    "# 1, named Variable without trainable tensor value\n",
    "#   intended to be used as a symbolic handler for input data or model outputs\n",
    "x1 = variable('x')\n",
    "# evaluate forward pass of the variable with dictionary input data\n",
    "print(x1({'x': 5.00}))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "61b1bccc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Parameter containing:\n",
      "tensor([0.3832], requires_grad=True)\n",
      "2282673511760\n",
      "2282673511760\n"
     ]
    }
   ],
   "source": [
    "# 2a, unnamed Variable with trainable randomly initialized tensor value\n",
    "x2 = variable()\n",
    "print(x2.value)         # torch parameter\n",
    "print(x2.display_name)  # display name for .show()\n",
    "print(x2.key)           # uniqye key used to construct computational graph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "f0f348df",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Parameter containing:\n",
      "tensor([0.1302], requires_grad=True)\n",
      "x2\n",
      "2281805243456\n"
     ]
    }
   ],
   "source": [
    "# 2b, named Variable with trainable randomly initialized tensor value\n",
    "x2_named = variable(display_name='x2')\n",
    "print(x2_named.value)         # torch parameter\n",
    "print(x2_named.display_name)  # display name for .show()\n",
    "print(x2_named.key)           # uniqye key used to construct computational graph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "ed9e38ea",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([3, 3])\n",
      "2281761036304\n",
      "2281761036304\n"
     ]
    }
   ],
   "source": [
    "# 3a, unnamed Variable with trainable randomly initialized tensor value of specified shape\n",
    "x3 = variable(3, 3)\n",
    "print(x3.value.shape)\n",
    "print(x3.display_name)        # display name for .show()\n",
    "print(x3.key)                 # uniqye key used to construct computational graph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "b58cc12b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([3, 3])\n",
      "x3\n",
      "2282673012992\n"
     ]
    }
   ],
   "source": [
    "# 3b, named Variable with trainable randomly initialized tensor value of specified shape\n",
    "x3_named = variable(3, 3, display_name='x3')\n",
    "print(x3_named.value.shape)         # shape of torch parameter\n",
    "print(x3_named.display_name)        # display name for .show()\n",
    "print(x3_named.key)                 # uniqye key used to construct computational graph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "f9307ead",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[1., 1., 1.],\n",
      "        [1., 1., 1.],\n",
      "        [1., 1., 1.]])\n",
      "torch.Size([3, 3])\n",
      "2281740926160\n",
      "2281740926160\n",
      "False\n",
      "True\n"
     ]
    }
   ],
   "source": [
    "# 4a, unnamed Variable initialized with given tensor\n",
    "x4 = variable(torch.ones(3, 3))\n",
    "print(x4.value)\n",
    "print(x4.value.shape)         # shape of torch parameter\n",
    "print(x4.display_name)        # display name for .show()\n",
    "print(x4.key)                 # uniqye key used to construct computational graph\n",
    "\n",
    "# by defaults its value is not trainable tensor\n",
    "print(x4.value.requires_grad)\n",
    "# it can be made trainable tensor\n",
    "x5 = variable(torch.ones(3, 3, requires_grad=True))\n",
    "print(x5.value.requires_grad)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "279e9f2f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([3, 3])\n",
      "x4\n",
      "2282672118784\n"
     ]
    }
   ],
   "source": [
    "# 4b, named Variable initialized with given tensor\n",
    "x4_named = variable(torch.ones(3, 3), display_name='x4')\n",
    "print(x4_named.value.shape)         # shape of torch parameter\n",
    "print(x4_named.display_name)        # display name for .show()\n",
    "print(x4_named.key)                 # uniqye key used to construct computational graph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "a2082449",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.0"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 5, composite Variable construction via algebraic expression on Variables\n",
    "x6 = x1 + 1\n",
    "# evaluate forward pass of the variable with dictionary input data\n",
    "x6({'x': 1.00})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "a9549e5d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# visualize computational graph of Variable\n",
    "x6.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "2f6fdce7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAHzCAYAAACe1o1DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABtyklEQVR4nO3dd1yVZeMG8Os557CXDMUFLpy4F+ZIMXeKGxxgpWZqmlhZZm+ZvWXLcmSO3rQUF7hx4xa1cORA3BmCC2SIbDjj94fBT1KWZ9znHK7v5/N+Pm/ncJ7n8n0TLu77ue9b0mg0GhARERERvSCZ6ABEREREZNpYKImIiIhIKyyURERERKQVFkoiIiIi0goLJRERERFphYWSiIiIiLTCQklEREREWmGhJCIiIiKtsFASERERkVZYKImIiIhIKyyURERERKQVFkoiIiIi0goLJRERERFphYWSiIiIiLTCQklEREREWmGhJCIiIiKtsFASERERkVZYKImIiIhIKyyURERERKQVFkoiIiIi0goLJRERERFphYWSiIiIiLTCQklEREREWmGhJCIiIiKtsFASERERkVZYKImIiIhIKyyURERERKQVFkoiIiIi0goLJRERERFphYWSiIiIiLTCQklEREREWmGhJCIiIiKtsFASERERkVZYKImIiIhIKyyURERERKQVFkoiIiIi0goLJRERERFpRSE6AFFFkpmrRGxyJvKUalgqZKjtagc7K/41JCIi08afZER6diMhHWuj4nD4WiLiUrKgeeo9CYCniy18G1bBaB9P1Hd3EBWTiIjohUkajUZT+pcRUXnFp2Rh1tZoRN5MglwmQaUu/q9awftdvNwwd3AzeLjYGjApERGRdlgoifRgw+k4zA6PgVKtKbFI/ptcJkEhkzDHzxsj2nnqMSEREZHusFAS6djiwzcwL+K61td5v1cDTPGtr4NERERE+sVV3kQ6tOF0nE7KJADMi7iO0NNxOrkWERGRPrFQEulIfEoWZofH6PSan4bHID4lS6fXJCIi0jUWSiIdmbU1GspyPC9ZFkq1BrO2Ruv0mkRERLrGQkmkAzcS0hF5M6nMC3AerJ2JpJ3zS/06lVqDyJtJuJmYrm1EIiIivWGhJNKBtVFxkMskvVxbLpOw5g8+S0lERMaLhZJIBw5fSyzX9kDloVJrcPh6ol6uTUREpAsslERa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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-30.833333333333336\n"
     ]
    }
   ],
   "source": [
    "# 5, composite Variable more complex example\n",
    "a, b = variable('a'), variable('b')\n",
    "x6 = a/3. - 1.5*b**2 + 5\n",
    "# visualize computational graph of Variable\n",
    "x6.show()\n",
    "# evaluate forward pass of the variable with dictionary input data\n",
    "print(x6({'a': 5.00, 'b': 3.00}))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "f534e3fd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 6, composite Variable construction via pytorch callables on Variables\n",
    "x7 = torch.add(variable('a'), variable('b'))\n",
    "x7.show()  # visualize computational graph of Variable"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "48dbec20",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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dVq1aqXp06dr27ZtuvzyyzV8+HDFxsbqvffeU1FRkdnxEAAolFVDoQQAeK02bdpo5syZ+vXXX9WrVy/dc889Ov/88/XBBx/I4XCYHQ9+LDU1VYZhqGnTpmZH8QkUSgCA12vfvr0++eQTbd68WV26dNGdd96p9u3ba9asWSouLjY7HvxQamqqmjRpoqCgILOj+AQKJQDAZ3Ts2FFffPGFNm7cqPPPP1+33367OnbsqE8//VROp9PsePAj3OFdNRRKAIDPueCCCzR37lytW7dOLVq00C233KLOnTvryy+/lMvlMjse/ACFsmoolAAAn9W9e3ctXLhQq1atUpMmTXTjjTeqa9eumjdvHsUSbqFQVg2FEgDg8y666CItWbJEK1asUJ06dWS329WzZ08tXryYYokqc7lcFMoqolACAPxG7969tXz5cn3//fcKDg7Wtddeq0suuURLly6lWKLSjh07pry8PEVHR5sdxWdQKAEAfic+Pl6JiYn65ptv5HQ6dfXVV+vyyy/X8uXLzY4GH8AalFVHoQQA+CXDMNS3b1+tXr1aCxYsUG5uruLj43XVVVdp5cqVZseDF6NQVh2FEgDg1wzD0HXXXaf169frq6++Unp6ui699FJdc801Wrt2rdnx4IVSU1MVFBSkRo0amR3FZ1AoAQABwTAMXX/99dq0aZM+++wz7d+/X7169dKAAQP0008/mR0PXiQlJUVRUVGyWKhJlcVPCgAQUCwWi/7yl79o8+bN+vjjj7Vr1y5169ZNN9xwg3755Rez48ELcId31VEoAQAByWq1avDgwUpKStKMGTOUlJSkLl266KabblJSUpLZ8WAiCmXVUSgBAAHNarXq9ttv17Zt2zRt2jRt2LBBHTt21K233qrffvvN7HgwAYWy6iiUAABIstls+tvf/qbt27drypQpWrlypeLi4nTHHXdo165dZsfDOeJ0OpWWlkahrCIKJQAApwgODtY999yjnTt36o033tB3332n888/X3fddZeSk5PNjodqdvjwYRUVFVEoq4hCCQDAaYSEhGj48OHavXu3XnvtNS1YsEBt2rTRfffdp5SUFLPjoZqwBuXZoVACAFCBGjVqaMSIEdqzZ49efPFFffnll4qNjdWDDz6otLQ0s+PBwyiUZ4dCCQBAJYSGhuqRRx5RcnKyxo0bp48//litWrXSQw89pEOHDpkdDx6SmpqqGjVqKCIiwuwoPoVCCQBAFdSqVUtPPPGEkpOT9fTTT+uDDz5Qy5Yt9dhjj+no0aNmx4ObTt7hbRiG2VF8CoUSAICzUKdOHT399NNKTk7WY489pilTpigmJkYjR45URkaG2fFwllgy6OxQKAEAcEO9evU0duxY7d27VyNGjNAbb7yhmJgYjR49WsePHzc7HqqIQnl2KJQAAHhAeHi4XnjhBSUnJ+v+++/Xq6++qpiYGI0bN06ZmZlmx0MlUSjPDoUSAAAPatiwoV5++WUlJydr2LBhmjBhgmJiYjRhwgRlZ2ebHQ8VKCoq0sGDBymUZ4FCCQBANWjUqJEmTpyo3bt3a8iQIXr22WcVExOjV155Rbm5uWbHw2kcOHBATqdT0dHRZkfxORRKAACqUdOmTfXGG29o165d+stf/qKnnnpKLVu21Ouvv668vDyz4+EUrEF59iiUAACcA82bN9fbb7+tHTt2aMCAAXr00UfVqlUrTZ48WQUFBWbHgyiU7qBQAgBwDrVo0ULvvfeetm/frr59+2rEiBFq3bq1pkyZosLCQrPjBbTU1FTVqVNHderUMTuKz6FQAgBgglatWun999/X1q1b1bt3b/39739XmzZtNHXqVBUVFZkdLyBxh/fZo1ACAGCitm3batasWfr111/Vo0cP3X333WrXrp0+/PBDORwOs+MFFArl2aNQAgDgBdq3b69PP/1Uv/zyizp16qS//vWviouL00cffaTi4mKz4wUECuXZo1ACAOBFOnXqpC+//FI//fST2rRpoyFDhqhTp0767LPP5HQ6zY7n1yiUZ49CCQCAF7rwwgs1b948rV27VtHR0br55pvVpUsXzZkzRy6Xy+x4fic/P19Hjx6lUJ4lCiUAAF6sR48eWrRokX788UdFRkZq0KBB6tq1q+bPn0+x9KD9+/dLYsmgs0WhBADAB1xyySVaunSpli9frtq1ayshIUG9evXSN998Q7H0ANagdA+FEgAAH3L55Zdr+fLlWrp0qWw2m/r166dLL71U3333HcXSDScLZbNmzUxO4psolAAA+BjDMHTVVVfpxx9/1OLFi+VwONSnTx9dccUVWrFihdnxfFJqaqoiIiIUGhpqdhSfRKEEAMBHGYaha665RmvWrNH8+fOVnZ2tK664Qn369NGqVavMjudTuMPbPRRKAAB8nGEY6t+/vzZs2KA5c+bo6NGjuuSSS9SvXz+tW7fO7Hg+ISUlhULpBgolAAB+wjAM3XDDDdq0aZM+/fRTpaamqmfPnkpISNDGjRvNjufVGKF0D4USAAA/Y7FYdNNNN2nz5s366KOPtGPHDnXt2lUDBw7U5s2bzY7nlSiU7qFQAgDgp6xWq2699VYlJSXpgw8+0ObNm9W5c2fdfPPNSkpKMjue18jKylJmZiaF0g0USgAA/JzNZtMdd9yh3377TVOnTtW6devUsWNH3Xbbbdq+fbvZ8Ux3csmg6Ohok5P4LgolAAABIigoSMOGDdOOHTv09ttvKzExUe3bt9df//pX7dq1y+x4pmFRc/dRKAEACDDBwcG67777tGvXLv373//Wt99+q/PPP1933XWXkpOTzY53zqWmpsowDEVFRZkdxWdRKAEACFAhISF68MEHtXv3br366quaP3++2rRpo/vvv79k1C4QpKamqnHjxgoKCjI7is+iUAIAEOBq1qyphx56SHv27NH48eP1+eefq3Xr1nrwwQd14MABs+NVO+7wdh+FEgAASJLCwsL02GOPKTk5Wc8++6w++ugjtWzZUg8//LAOHTpkdrxqQ6F0H4USAACUUrt2bY0cOVLJyckaNWqUpk+frpYtW+qxxx7T0aNHzY7ncRRK91EoAQDAadWtW1ejR49WcnKyHn30UU2ZMkUxMTEaNWqUMjIyzI7nES6Xi0LpARRKAABQofr162vcuHFKTk7WP/7xD/3nP/9RTEyMxowZo99//93seG45fvy4cnNzKZRuolACAIBKiYiI0IQJE7Rnzx7dd999euWVV9SiRQs999xzOnHihNnxzgprUHoGhRIAAFRJZGSkXnnlFe3Zs0d33nmnXnjhBcXExGjChAnKzs42O16VUCg9g0IJAADOSuPGjfX6669r9+7duvXWWzVmzBjFxMTo1VdfVW5urtnxKiUlJUU2m02NGzc2O4pPo1ACAAC3REVFafLkydq1a5cGDRqkkSNHqmXLlnr99deVl5dndrwKpaamqmnTprJarWZH8WmGy+VymR0CAAD4j+TkZD3//PP64IMP1KhRI40aNUp33323QkJCzI4mSdq8ebNee+01NWrUSMuWLVN2drZmzpyp8847Tw0aNDA7nk+iUAIAgGqxc+dOPffcc5o1a5aioqL09NNP684771RwcLCpuT799FPdcsst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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 6, composite Variable construction via pytorch callables on Variables\n",
    "x8 = torch.sin(x7) + torch.randn(1, 1)\n",
    "x8.show()  # visualize computational graph of Variable"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "f017be06",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAHzCAYAAACe1o1DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAfd0lEQVR4nO3de5TWBb3v8e8zg9wFFQXMRPOCFmoa2/RYmhCRt1zL41mWSCtR23Lctuxi25O1uOjyVq5Nq13W8oh6to1pex8zT2WZQnsjJtp2m4KakOKQhcQMgg4Czsxz/jBGBhiYmd9z+V1er/+YeXjmmfnrs77vuZTK5XI5AACgnxrq/QIAAMg2gxIAgEQMSgAAEjEoAQBIxKAEACARgxIAgEQMSgAAEjEoAQBIxKAEACARgxIAgEQMSgAAEjEoAQBIxKAEACARgxIAgEQMSgAAEjEoAQBIxKAEACARgxIAgEQMSgAAEjEoAQBIxKAEACARgxIAgEQMSgAAEjEoAQBIxKAEACARgxIAgEQMSgAAEjEoAQBIxKAEACARgxIAgEQMSgAAEjEoAQBIxKAEACARgxIAgEQMSgAAEjEoAQBIxKAEACCRAfV+AfXWtrk9Vra0xZb2zhg4oCEOHjUshg0q/JcFAKDXCrmclr/2RjQtaY6Ff1gTza0bo7zN+0oRMW6foTHpiNFxwQnj4vAxe9brZQIAZEKpXC6Xd/+wfFjVujGu/smzsWjF2mhsKEVHZ8+f+tb3n3zYvnH9OUfHgfsMreErBQDIjsIMynuebI7ZDyyL9s7yLofk9hobSjGgoRRzz54Qnzl+XBVfIQBANhViUH534fK4+aEXEz/PlVPHx+WTDq/AKwIAyI/c/5T3PU82V2RMRkTc/NCLce+TzRV5LgCAvMj1oFzVujFmP7Csos8564Flsap1Y0WfEwAgy3I9KK/+ybPR3ofvl+yN9s5yXP2TZyv6nAAAWZbbQbn8tTdi0Yq1ffoBnN7o6CzHohVrY8WaNyr6vAAAWZXbQdm0pDkaG0o7fV/n25vj1Vtnxqu3zozOtzd3vb3jrTfiT//82Vh915VR7uzo8bkbG0rxw8d9LyUAQESOB+XCP6zp8TrZsMeg2PesL0X7uj/H6//xL11vb33o+9G5eWOMOvNLUWpo7PG5OzrLsfDFNRV/zQAAWZTLv5Tz5ub2aN7ND84Mes8RMeLEc2PD4/83ho7/b9HR9npsfP4/Yu+Pfz722OeA3X6M5paN0ba53Z9pBAAKL5dr6JWWtujNd07u9dFp8daKJ6PlZ/Oi8+1NMejAo2LPvzu7Vx+jHBErW9piwntGJnqtAABZl8vkvaW9s1ePKzXuEaPOuCLa178W5S1vxagzvxil0s6/7zLJxwEAyLNcDsqBA3r/aW16+amIiCi3b4n2dX+u2scBAMirXC6ig0cNi97cGbeseTleX/yjGHb0lBg45tBoefCfo3NTW68+RulvHwcAoOhyOSiHDRoQ4/YZusvHlDvao+Xn347G4aNinyl/H6PO/GJ0tK2L1kf+d68+xrhRQ/1ADgBA5HRQRkRMOmJ0j7+HMiJi/WP3xpbXXop9z7giGgYNjYGj3xd7feT8aHv24Xjrj0/u8rkbG0oxafzoSr9kAIBMyu2gvOCEcT3+HsrNq1fE+t/+OPaceFYMPuiYrrePOPF/xMD9D/9b+n6zx+fu6CzH9BPHVfw1AwBkUalcLlf2bxOmyGfnL4nHXmqp6J9fbCxFnHTovnHXxSdU7DkBALIstxfKiIjrzzk6Buwie/dVuVyO9re3xFlj/R1vAICtcj0oD9xnaMw9e0LFnq9UKsWYVb+J8z81NebOnRsdHT3/vW8AgKLI9aCMiPjM8ePiyqnjK/JcX516RPy26Z9izpw5MXfu3Jg6dWqsXr26Is8NAJBVuf4eym3d82RzzH5gWbR3lvv0PZWNDaUY0FCKa86eEJ8+/t0fxFmwYEFMmzYtIiLuvvvumDx5csVfMwBAFuT+QrnVZ44fFw9/6WNx0iGjIiJ2+SuFtn3/SYeMioe/9LFuYzIiYvLkyfH000/HUUcdFVOmTJHAAYDCKsyFclvLX3sjmpY0x8IX10Rzy8bY9gtQind+afmk8aNj+onj4rDRe+7yuTo6OuK6666LOXPmxKRJk6KpqSnGjh1b1dcPAJAmhRyU22rb3B4rW9piS3tnDBzQEAePGtavv4AjgQMARVX4QVlJq1evjunTp8eCBQti9uzZ8Y1vfCMaGxvr/bIAAKrKoKwwCRwAKBqDskokcACgKArzU9615qfAAYCicKGsMgkcAMg7g7JGJHAAIK8k7xqRwAGAvHKhrDEJHADIG4OyTiRwACAvJO86kcABgLxwoawzCRwAyDqDMiUkcAAgqyTvlJDAAYCscqFMGQkcAMgagzKlJHAAICsk75SSwAGArHChTDkJHABIO4MyIyRwACCtJO+MkMABgLRyocwYCRwASBuDMqMkcAAgLSTvjJLAAYC0cKHMOAkcAKg3gzInJHAAoF4k75yQwAGAenGhzBkJHACoNYMypyRwAKBWJO+cksABgFpxocw5CRwAqDaDsiAkcACgWiTvgpDAAYBqcaEsGAkcAKg0g7KgJHAAoFIk74KSwAGASnGhLDgJHABIyqAkIiRwAKD/JG8iQgIHAPrPhZJuJHAAoK8MSnZKAgcAekvyZqckcACgt1wo2SUJHADYHYOSXpHAAYCeSN70igQOAPTEhZI+kcABgO0ZlPSLBA4AbCV50y8SOACwlQsliUjgAIBBSUVI4ABQXJI3FSGBA0BxuVBSURI4ABSPQUlVSOAAUBySN1UhgQNAcbhQUlUSOADkn0FJTUjgAJBfkjc1IYEDQH65UFJTEjgA5I9BSV1I4ACQH5I3dSGBA0B+uFBSVxI4AGSfQUkqSOAAkF2SN6kggQNAdrlQkioSOABkj0FJKkngAJAdkjepJIEDQHa4UJJqEjgApJ9BSSZI4ACQXpI3mSCBA0B6uVCSKRI4AKSPQUkmSeAAkB6SN5kkgQNAerhQkmkSOADUn0FJLkjgAFA/kje5IIEDQP24UJIrEjgA1J5BSS5J4ABQO5I3uSSBA0DtuFCSaxI4AFSfQUkhSOAAUD2SN4UggQNA9bhQUigSOABUnkFJIUngAFA5kjeFJIEDQOW4UFJoEjgAJGdQQkjgAJCE5A0hgQNAEi6UsA0JHAD6zqCEnZDAAaD3JG/YCQkcAHrPhRJ2QQIHgN0zKKEXJHAA6JnkDb0ggQNAz1wooQ8kcADYkUEJ/SCBA8C7JG/oBwkcAN7lQgkJSOAAYFBCRUjgABSZ5A0VIIEDUGQulFBBEjgARWRQQhVI4AAUieQNVSCBA1AkLpRQRRI4AEVgUEINSOAA5JnkDTUggQOQZy6UUEMSOAB5ZFBCHUjgAOSJ5A11IIEDkCculFBHEjgAeWBQQgpI4ABkmeQNKSCBA5BlLpSQIhI4AFlkUEIKSeAAZInkDSkkgQOQJS6UkGISOABZYFBCBkjgAKSZ5A0ZIIEDkGYulJAhEjgAaWRQQgZJ4ACkieQNGSSBA5AmLpSQYRI4AGlgUEIOSOAA1JPkDTkggQNQTy6UkCPbJvDJkydHU1NTjBkzpt4vC4CcMyghh7Ym8FKpFE1NTRI4AFUleUMObU3gEyZMkMABqDoXSsgxCRyAWjAooQAkcACqSfKGApDAAagmF0ooEAkcgGowKKGAJHAAKknyhgKSwAGoJBdKKDAJHIBKMCgBCRyARCRvQAIHIBEXSqCLBA5AfxiUwA4kcAD6QvIGdiCBA9AXLpRAjyRwAHrDoAR2a+HChTFt2rSICAkcgB1I3sBuTZo0SQIHoEculECvSeAA7IxBCfSZBA7AtiRvoM8kcAC25UIJ9JsEDkCEQQlUgAQOUGySN5CYBA5QbC6UQMVI4ADFZFACFSeBAxSL5A1UnAQOUCwulEDVSOAAxWBQAlUngQPkm+QNVJ0EDpBvLpRAzUjgAPlkUAI1J4ED5IvkDdScBA6QLy6UQN1I4AD5YFACdSeBA2Sb5A3UnQQOkG0ulEBqSOAA2WRQAqkjgQNki+QNpI4EDpAtLpRAakngANlgUAKpJ4EDpJvkDaSeBA6Qbi6UQGZI4ADpZFACmSOBA6SL5A1kjgQOkC4ulEBmSeAA6WBQApkngQPUl+QNZJ4EDlBfLpRAbkjgAPVhUAK5I4ED1JbkDeSOBA5QWy6UQG5J4AC1YVACuSeBA1SX5A3kngQOUF0ulEBhSOAA1WFQAoUjgQNUluQNFI4EDlBZLpRAYUngAJVhUAKFJ4EDJCN5A4UngQMk40IJ8DcSOED/GJQA25HAAfpG8gbYjgQO0DculAA9kMABesegBNgNCRxg1yRvgN2QwAF2zYUSoJckcICdMygB+kgCB+hO8gboIwkcoDsXSoB+ksAB3mFQAiQkgQNFJ3kDJCSBA0XnQglQIRI4UFQGJUCFSeBA0UjeABUmgQNF40IJUCUSOFAUBiVAlUngQN5J3gBVJoEDeedCCVAjEjiQVwYlQI1J4EDeSN4ANSaBA3njQglQJxI4kBcGJUCdSeBA1kneAHUmgQNZ50IJkBISOJBVBiVAykjgQNZI3gApI4EDWeNCCZBSEjiQFQYlQMpJ4EDaSd4AKSeBA2nnQgmQERI4kFYGJUDGSOBA2kjeABkjgQNp40IJkFESOJAWBiVAxkngQL1J3gAZJ4ED9eZCCZATEjhQLwYlQM5I4ECtSd4AOSOBA7XmQgmQUxI4UCsGJUDOSeBAtUneADkngQPV5kIJUBASOFAtBiVAwUjgQKVJ3gAFI4EDleZCCVBQEjhQKQYlQMFJ4EBSkjdAwUngQFIulABEhAQO9J9BCUA3EjjQV5I3AN1I4EBfuVACsFMSONBbBiUAu7RgwYKYNm1alEolCRzYKckbgF2aPHmyBA7skgslAL0igQM9MSgB6BMJHNie5A1An0jgwPZcKAHoFwkc2MqgBCARCRyQvAFIRAIHXCgBqAgJHIrLoASgoiRwKB7JG4CKksCheFwoAagKCRyKw6AEoKokcMg/yRuAqpLAIf9cKAGoCQkc8sugBKCmJHDIH8kbgJqSwCF/XCgBqAsJHPLDoASgriRwyD7JG4C6ksAh+1woAUgFCRyyy6AEIFUkcMgeyRuAVJHAIXtcKAFIJQkcssOgBCDVJHBIP8kbgFSTwCH9XCgByAQJHNLLoAQgUyRwSB/JG4BMkcAhfVwoAcgkCRzSw6AEINMkcKg/yRuATJPAof5cKAHIBQkc6segBCBXJHCoPckbgFyRwKH2XCgByCUJHGrHoAQg1yRwqD7JG4Bck8Ch+lwoASgECRyqx6AEoFAkcKg8yRuAQpHAofJcKAEoJAkcKsegBKDQJHBITvIGoNAkcEjOhRIAQgKHJAxKANiGBA59J3kDwDYkcOg7F0oA2AkJHHrPoASAXZDAYfckbwDYBQkcds+FEgB6QQKHnhmUANAHEjjsSPIGgD6QwGFHLpQA0A8SOLzLoASABCRwkLwBIBEJHFwoAaAiJHCKzKAEgAqSwCkiyRsAKkgCp4hcKAGgCiRwisSgBIAqksApAskbAKpIAqcIXCgBoAYkcPLMoASAGpLAySPJGwBqSAInj1woAaAOJHDyxKAEgDqSwMkDyRsA6kgCJw9cKAEgBSRwssygBIAUkcDJIskbAFJEAieLXCgBIIUkcLLEoASAFJPAyQLJGwBSTAInC1woASADJHDSzKAEgAyRwEkjyRsAMkQCJ41cKAEggyRw0sSgBIAMk8BJA8kbADJMAicNXCgBIAckcOrJoASAHJHAqQfJGwByRAKnHlwoASCHJHBqyaAEgByTwKkFyRsAckwCpxZcKAGgACRwqsmgBIACkcCpBskbAApEAqcaXCgBoIAkcCrJoASAApPAqQTJGwAKTAKnElwoAQAJnEQMSgCgiwROf0jeAEAXCZz+cKEEAHYggdMXBiUA0CMJnN6QvAGAHkng9IYLJQCwWxI4u2JQAgC9JoGzM5I3ANBrEjg740IJAPSZBM62DEoAoN8kcCIkbwAgAQmcCBdKAKACJPBiMygBgIqRwItJ8gYAKkYCLyYXSgCg4iTwYjEoAYCqkcCLQfIGAKpGAi8GF0oAoOok8HwzKAGAmpHA80nyBgBqRgLPJxdKAKDmJPB8MSgBgLqRwPNB8gYA6kYCzwcXSgCg7iTwbDMoAYDUkMCzSfIGAFJDAs8mF0oAIHUk8GwxKAGA1JLAs0HyBgBSSwLPBhdKACD1JPB0MygBgMyQwNNJ8gYAMkMCTycXSgAgcyTwdDEoAYDMksDTQfIGADJLAk8HF0oAIPMk8PoyKAGA3JDA60PyBgByQwKvDxdKACB3JPDaMigBgNySwGtD8gYAcksCrw0XSgAg93aXwDs7O6OhwZ2tv3zlAIDca2xsjFmzZsXDDz8cS5cujWOPPTYWLFgQERGtra1x5JFHxg033FDnV5ldLpQAQKGsXr06pk+fHgsWLIhZs2bFk08+Gb/4xS9iyJAh0dzcHPvuu+9un6Ntc3usbGmLLe2dMXBAQxw8algMGzSgBq8+nQxKAKBwtibw2bNnd72toaEhrrrqqrj++ut3+n+Wv/ZGNC1pjoV/WBPNrRtj2wFViohx+wyNSUeMjgtOGBeHj9mzup9AyhiUAEAhPf744/GRj3wkOjs7u962syvlqtaNcfVPno1FK9ZGY0MpOjp7nk5b33/yYfvG9eccHQfuM7Sqn0Na+B5KAKBw3nrrrTj33HO7jcmIiE2bNsXNN9/c9e97nmyOKfP+PR57qSUiYpdjctv3P/ZSS0yZ9+9xz5PNFX7l6eRCCQAUzvr16+OMM86I3/3ud7Fly5aIeCd5b/1p71deeSXuX/5W3PzQi4k/1pVTx8flkw5P/Dxp5kIJABTOyJEjY/HixdHW1hbPPfdc3HPPPXHVVVfFhz/84Rg8eHD8n0XLKzImIyJufujFuLcOl8qVK1dGqVSKO++8s8//984774xSqdTrxxuUAEAu/PWvf40rrrgijjzyyBgyZEiMHj06PvzhD8dVV10Vb7755k7/z4ABA+L9739/fPrTn47rr78+lixZEi+s+mv8y3ObKvraZj2wLFa1bqzoc2519913x7e//e2qPHdvSd4AQOa1trbGcccdFxs2bIiLLroojjzyyGhpaYlnnnkmfvazn8UzzzwTBx98cK+e67Pzl8RjL7Xs9vsl+6KxoRQnHTIq7rr4hIo951ZnnXVWLF26NFauXNnt7eVyOTZv3hx77LFHNDY29uk577zzzpgxY0b0diYW9xcmAQC5MX/+/Ghubo7FixfHSSed1O19GzZsiIEDB/bqeZa/9kYsWrG24q+vo7Mci1asjRVr3ojDRtfmVwqVSqUYPHhwTT6W5A0AVNWcOXOiVCrFihUr4sILL4y99torRo4cGTNmzIiNG9/NwKVSKS6//PK4//7746ijjopBgwbFhAkT4pe//OVuP8Yf//jHaGxsjBNPPHGH940YMWKHYbVkyZI47bTTYuTIkTF06ND42Mc+FosXL46mJc3R2PDu9w5uWrUs/nLnl+KVb50Tr/7gknjjvx6M1xc1xSs3ntX1mPbXX4tXbjwr3nzm4R0+9is3nhWvL2qKiHeulD98vDleffXVuOiii2LMmDFdn+Ptt9/e7f/95je/iVKpFD/+8Y/juuuui/e+970xePDg+PjHPx4rVqzoetypp54aP//5z+OVV16JUqkUpVKp6xK7s++hfOaZZ+LCCy+MQw45JAYPHhxjx46Niy66KFpaWnb7Nd4VF0oAoCbOO++8eN/73hc33HBDPPXUU3HbbbfF6NGj46abbup6zKOPPhr33XdfXHbZZbHnnnvGd77znTj33HOjubk5Ro0a1eNzH3TQQdHR0RF33XVXfO5zn9vl61iwYEGcfvrpMXHixJg9e3Y0NDTEHXfcEZMnT44P/P286Bh+UEREbFmzMtbcOysaho6IvT46LcqdHfH6o03ROHSvfn3+HZ3l+NV/vhDz/+GLXeN5v/32iwcffDAuvvji2LBhQ3zxi1/s9n9uvPHGaGhoiCuvvDLWr18f3/zmN+OCCy6IJUuWRETE17/+9Vi/fn386U9/innz5kVExPDhw3t8Db/+9a/jpZdeihkzZsTYsWNj2bJlceutt8ayZcvi8ccf79MP4mzLoAQAauK4446L+fPnd/27paUl5s+f321QPv/88/Hcc8/FoYceGhERkyZNig9+8IPxox/9KC6//PIen/uiiy6KefPmxYUXXhg33nhjnHrqqXHKKafEGWecESNHjux6XLlcjpkzZ8akSZPiwQcf7BpQl156aXzgAxPihZ/dFmM+c21ERLy+6IcRUY6xF9wUA0aOjoiIYUd8JP48/x/6/TVYev+tMbyjI5Y++2zXQJ45c2acf/75MWfOnLj00ktjyJAhXY/ftGlTPP30013Jfu+9944rrrgili5dGkcddVR84hOfiAMOOCDWrVsX06dP3+3Hv+yyy+IrX/lKt7edeOKJcf7558ejjz4aJ598cr8+L8kbAKiJmTNndvv3ySefHC0tLbFhw4aut02ZMqVrTEZEHHPMMTFixIh46aWXdvncY8aMid///vcxc+bMWLduXfzgBz+IadOmxejRo+Paa6/t+uGSp59+OpYvXx7Tpk2LlpaWWLt2baxduzba2tpi4kknx6ZVS6Nc7oxyZ0dsevm/YsjhJ3aNyYiIPfY9MIYc8qF+ff7lcjk2/mFxnDz5k1Eul7s+9tq1a+OTn/xkrF+/Pp566qlu/2fGjBndvv9z6+Db3dejJ9uP1bVr13Z9m8D2H7svXCgBgJoYN25ct3/vvffeERGxbt26GDFixE4fs/Vx69at2+3z77///vH9738/brnllli+fHn86le/iptuuilmzZoV+++/f1xyySWxfPnyiIhdZvHOzRsj2t+Ocvvm2GPv9+zw/gH7HBDxx9/t9vXs8Lwb10fn5rb416Y741+b7tzpY9asWdPt37v6mvVHa2trzJ07N+65554dPtb69ev79ZwRBiUAUCM9/eqabX81TW8eszulUinGjx8f48ePjzPPPDMOP/zwaGpqiksuuaTrTy1+61vfimOPPbbb/1u5ti2+/tOl0bDH4Ohsf7vXHy96+L7DcmfH9p9ERESc9d/Piyv+5+d3+n+OOeaYbv+uxNdjW+edd1489thj8dWvfjWOPfbYGD58eHR2dsZpp522w5+h7AuDEgDIrUMOOST23nvv+Mtf/hIR0ZXTR4wYEVOmTOn22LbN7XHd7wdEOSIaho6I0oBB8fa6P+/wnO2tr3b7d8Pgd34IpnNzW/fHbfhr98cNHRGlgUNiyICGHT52Er39QZp169bFI488EnPnzo1Zs2Z1vX3r1TYJ30MJAGTKxo0b44UXXoi1a9/9fZFLliyJtra2HR77xBNPREtLSxxxxBERETFx4sQ49NBD4+abb97hr+cMGzQgxg585+96lxoaY/D7jou3lj8e7evfTcNvr10Vb73U/XsNGwYNjYYhI2LTqqXd3v7mUz/v9u9SQ2OMPuaU+On998XSpd0fG/HOX/rpj2HDhvUqV2+9dm5/3azEX9lxoQQAMuWJJ56ISZMmxezZs2POnDkREXHXXXdFU1NTnHPOOTFx4sQYOHBgPP/883H77bfH4MGD4+qrr46IiIaGhrjtttvi9NNPjwkTJsSMGTPigAMOiFdffTUWLlwYrW+VovET/xgdneXY6+QLYvXLT8Xqpqtizw+dGdHZERv+8//FHvuOi7f/urLbaxr+wamx4fF/i5ZffCcG7n9YbFq1bIdLZmNDKaZ/4Wvxb7NeiBNOOCE+//nPxwc+8IFobW2Np556Kh5++OFobW3t89dj4sSJce+998aXv/zlOP7442P48OHxqU99aofHjRgxIk455ZT45je/GW+//XYccMAB8dBDD8XLL7/c54+5PYMSAMi8Sy+9NIYOHRqPPPJI/PSnP40NGzbEfvvtF1OnTo2vfe1rcdxxx3U99tRTT43f/va3ce2118Z3v/vdePPNN2Ps2LFxwgknxMXnfTZm/e6dC97A0e+L0eddE+sW3BavL/phDNhz39jroxdEx5utsX67QTnyI+dH58YN0faHxdH2wqIYcsjfxejz5safvnNB12M6Ossx87QPxT+e9kRcc801cd9998Utt9wSo0aNigkTJnT79Ul9cdlll8XTTz8dd9xxR8ybNy8OOuignQ7KiHf+7vcXvvCF+N73vhflcjmmTp0aDz74YLznPTv+8FFf+FveAADb2N3f8n59UVOsX/yjOOh//azXz1nNv+WdBr6HEgBgG9efc3QMaOjfX4zpyYCGUlx/ztEVfc40MSgBALZx4D5DY+7ZEyr6nNecPSEO3GdoRZ8zTQxKAIDtfOb4cXHl1PEVea6vTj0iPn38jr+wPU98DyUAQA/uebI5Zj+wLNo7yz1+T+XONDaUYkBDKa45e0Lux2SEQQkAsEurWjfG1T95NhatWBuNDaVdDsut7z/5sH3j+nOOznXm3pZBCQDQC8tfeyOaljTHwhfXRHPLxth2QJUiYtyooTFp/OiYfuK4OGz0nvV6mXVhUAIA9FHb5vZY2dIWW9o7Y+CAhjh41LAYNqi4v97boAQAIBE/5Q0AQCIGJQAAiRiUAAAkYlACAJCIQQkAQCIGJQAAiRiUAAAkYlACAJCIQQkAQCIGJQAAiRiUAAAkYlACAJCIQQkAQCIGJQAAiRiUAAAkYlACAJCIQQkAQCIGJQAAiRiUAAAkYlACAJCIQQkAQCIGJQAAiRiUAAAkYlACAJCIQQkAQCIGJQAAiRiUAAAkYlACAJCIQQkAQCIGJQAAiRiUAAAkYlACAJCIQQkAQCIGJQAAiRiUAAAkYlACAJCIQQkAQCL/H+BYQpcMbdFwAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 7, composite Variable construction with arbitrary function and arbitrary inputs\n",
    "\n",
    "# Variable wrapping torch.nn module with Variable inputs\n",
    "x9 = variable([variable('x')], torch.nn.Sequential(torch.nn.Linear(1, 1)),\n",
    "               display_name='nn.Sequential')\n",
    "# Note: display_name argument allows to customize display string to be visualized in the .show() method\n",
    "x9.show()  # visualize computational graph of Variable"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "8f05a364",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['x', 'y']\n",
      "30.0\n"
     ]
    }
   ],
   "source": [
    "#Variable wrapping arbitrary python callable with Variable inputs\n",
    "x10 = variable([variable('x'), variable('y')], lambda x, y: x**2 + y,\n",
    "               display_name='x^2 + y')\n",
    "# variable keys define expected symbolic inputs to composite variables\n",
    "print(x10.keys)\n",
    "# evaluate forward pass of the variable with dictionary input data\n",
    "print(x10({'x': 5.00, 'y': 5.00}))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "75a2eded",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x10.show()  # visualize computational graph of Variable"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "5587664d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([-0.0031, -0.8714])\n"
     ]
    },
    {
     "data": {
      "image/png": "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kiVav369ypUrp86dO+vee+/V2rVrXV0a4HUIlLhul4fESpUqFaw7nDBhgpKSkrRz507WHcLr2O12Tig9TMuWLbVmzRotX75c2dnZat26tTp06KAtW7a4ujTAa9AVYZqjdYfDhg1TiRIl9PbbbxesO/znP//JukN4LUbenslisah9+/batGmTvvjiCx06dEh33XWXHnzwQf3888+uLg/weHRFFKqwdYfz5s1TWlqali1bxrpDFBuMvD2bxWJRjx49lJiYqNmzZ2vz5s1q0KCBHn30UR08eNDV5QEei0CJPzG77rB3796sO0Sxw8jbO/j6+uqRRx7R3r179cYbb2jZsmUKDw/XkCFD9Ouvv7q6PMDj8B5KSHK87rBWrVqKjY1VbGysmjdvLh8fH1eXCbhc/fr11aFDB7322muuLgVFKDMzUzNnztS0adN06dIlPfPMM/rnP/+pW265xdWlAR6BQFmMOVp32KRJk4Kd2REREYz2gD+oV6+eHnjgAb366quuLgU3wOnTpzV9+nS9/vrr8vf31/DhwzVkyBCVKlXK1aUBbo1AWcwYrTuMiYlRTEwM6w6Bq6hTp466du2qV155xdWl4Ab69ddfNWXKFM2aNUtBQUEaM2aMBgwYoICAAFeXBrglbgTycna7XZs3b9aYMWMUERGh8PBwjR8/XpUqVdLs2bOVmpqqVatWaciQIYRJwASe8i4eKleurJkzZyopKUkdO3bUM888ozp16uijjz5SXl6eq8sD3A5d0Qs5Wnf49ttv66677mLdIeAkVi8WL9WrV9fs2bO1c+dONW3aVI8++qgiIyP15ZdfsnUHuAyB0ksUtu5w5cqVSk1N1Zw5c1h3CDiJE8riqV69evr888+1efNmhYaG6sEHH1TTpk21fPlygiUgAqVHM1p3OHjw4CvWHbZp00Z+fn6uLhfwCgTK4u3OO+/UN998ozVr1iggIEAdOnRQdHS0NmzY4OrSAJeiK3oYM+sOJ02axLpD4AZh5A1JioqK0vr167VkyRKdOXNGLVu2VOfOnfXf//7X1aUBLkGgdHN2u/2KndisOwRcixNK5LNYLOrUqZO2bt2qefPmae/evWrcuLEeeughJScnu7o84KYq9l0xMztXu45laFvKae06lqHM7FxXl/SndYeRkZF65ZVXVLt2bdYdAi5GoMQfWa1W9e7dW7t379b777+v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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 8, create new variables via slicing on existing variables\n",
    "# select column 0\n",
    "x10_column0 = x10[:, 0]\n",
    "# note: the following still works because in case of a size mismatch the y tensor is automatically broadcast to the shape of the x tensor\n",
    "print(x10_column0({'x': torch.randn(2, 2), 'y': torch.randn(2, 1)}))\n",
    "x10_column0.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "fb1b202f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([ 1.2057, -0.6255])\n"
     ]
    },
    {
     "data": {
      "image/png": "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AAA4pdKKKmUXlOp8lU3eXhaFB/q75A44deW+V47L+uijj3TkyBHFx8ebHQUAAKfl7+OlnsFX3mrRXTChRDWbzaabbrpJnTp10po1a8yOAwAAmggmlKi2bt067du3T++++67ZUQAAQBPChBLV7rjjDlVWVmrbtm3s2w0AAOqMCSUkSV9//bW2bNmiTz75hDIJAADqhQklJEkPPvig9u3bp/3798tiYQMlAABQd0woobS0NK1atUpz586lTAIAgHpjQgk988wzWrt2rbKzs+Xj42N2HAAA0MQwjnJzx48f18KFCzVx4kTKJAAAuCoUSjc3a9Ys+fj4aOzYsWZHAQAATRSF0o2dPXtW7777rsaOHas2bdqYHQcAADRRFEo3NnfuXJWVlWnixIlmRwEAAE0YD+W4qfPnz6tTp0769a9/rb///e9mxwEAAE0YE0o3lZSUpGPHjik+Pt7sKAAAoIljQumGbDabbrzxRnXp0kWffvqp2XEAAEATx8Lmbig5OVn79+/XvHnzzI4CAABcABNKN3T77bfLZrPpX//6l9lRAACAC2BC6Wa2bdumrVu3cqsbAAA4DBNKNzNixAilpaVp37597NsNAAAcggmlGzlw4IA+/fRTvf/++5RJAADgMEwo3chTTz2l9evXKzMzk327AQCAwzCmchPHjh3TokWLNHHiRMokAABwKAqlm5g5c6aaN2+uZ5991uwoAADAxVAo3cCZM2f03nvvady4cWrdurXZcQAAgIuhULqBv/3tbzp37pxiYmLMjgIAAFwQD+W4uIqKCnXq1EnDhg3T/PnzzY4DAABcEBNKF5eUlKTjx48rLi7O7CgAAMBFMaF0YTabTT169FD37t21atUqs+MAAAAXxcLmLmzNmjVKS0vTBx98YHYUAADgwphQurCBAwfKYrFoy5YtZkcBAAAujAmli9q6dau2bdum1atXmx0FAAC4OCaULmr48OE6dOiQ9u7dy77dAACgQTGhdEE//PCD1qxZow8++IAyCQAAGhwTShc0ZswYpaSkKDMzU97e3mbHAQAALo7xlYs5cuSIFi9erNjYWMokAABoFBRKFzNz5kz5+fnpmWeeMTsKAABwExRKF1JUVKS//e1vioyMVKtWrcyOAwAA3ASF0oW89957qqioUHR0tNlRAACAG+GhHBdx7tw5derUSb/97W81d+5cs+MAAAA3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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# select column 1\n",
    "x10_column1 = x10[:, 1]\n",
    "# as above, the y tensor is broadcast to the shape of the x tensor\n",
    "print(x10_column1({'x': torch.randn(2, 2), 'y': torch.randn(2, 1)}))\n",
    "x10_column1.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6c03243f",
   "metadata": {},
   "source": [
    "## Constraint\n",
    "\n",
    "**Constraint** is constructed by using comparative infix operators, '<', '>', '==', '<=', '>=' with Variable objects\n",
    "while '*' is used to weight loss term and '^' to determine l-norm of constraint violation in the loss.       \n",
    "\n",
    "The forward pass of Constraint returns a dictionary with three elements: loss, value, penalty which are defined\n",
    "depending on the type of constraint as follows:  \n",
    "1. equality constraint: g(x) == b  \n",
    "   * value = g(x) - b  \n",
    "   * penalty = g(x) - b  \n",
    "   * loss = metric(penalty)   \n",
    "2. less than constraint: g(x) <= b  \n",
    "   * value = g(x) - b  \n",
    "   * penalty = relu(g(x) - b)  \n",
    "   * loss = metric(penalty)   \n",
    "3. greater than constraint: g(x) >= b  \n",
    "   * value = b - g(x)   \n",
    "   * penalty = relu(b - g(x))  \n",
    "   * loss = metric(penalty)        \n",
    "   \n",
    "with metric() depending on the norm type: ^1 for L1 norm and ^2 for L2 norm \n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "b75b6a58",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'x_lt_2495455689984': tensor(4.), 'x_lt_2495455689984_value': tensor(4.), 'x_lt_2495455689984_violation': tensor(4.)}\n"
     ]
    }
   ],
   "source": [
    "# 1, Create a constraint by comparing variable and a constant\n",
    "con_1 = variable('x') < 1.0\n",
    "# Evaluate constraint violation at a given value of variable\n",
    "print(con_1({'x': 5.00}))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "017c9b2c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'x_lt_y': tensor(1.8993), 'x_lt_y_value': tensor([[-0.8469, -0.6510],\n",
      "        [ 0.3376, -0.1083],\n",
      "        [-0.2314, -0.2492]]), 'x_lt_y_violation': tensor([[0.0000, 0.0000],\n",
      "        [0.1140, 0.0000],\n",
      "        [0.0000, 0.0000]])}\n"
     ]
    }
   ],
   "source": [
    "# 2, Create a constraint by comparing variable and variable\n",
    "# define variables\n",
    "x, y = variable('x'), variable('y')\n",
    "# define constraint with 2-norm and weighting factor 100.\n",
    "con_2 = 100.*(x <= y)^2\n",
    "# Evaluate constraint violation at a given value of variables\n",
    "print(con_2({'x': torch.rand(3, 2), 'y': torch.rand(3, 2)}))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "dd7eed8a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'x_lt_y': tensor(1.7068), 'x_lt_y_value': tensor([[ 0.0302, -0.5817],\n",
      "        [ 0.3185, -0.8387],\n",
      "        [ 0.0072, -0.2574]]), 'x_lt_y_violation': tensor([[9.1421e-04, 0.0000e+00],\n",
      "        [1.0144e-01, 0.0000e+00],\n",
      "        [5.2062e-05, 0.0000e+00]])}\n"
     ]
    }
   ],
   "source": [
    "# 3, Weighting factor can be a trainable torch parameter\n",
    "con_3 = torch.nn.Parameter(torch.tensor(0.1))*(variable('x') <= variable('y'))^2\n",
    "print(con_2({'x': torch.rand(3, 2), 'y': torch.rand(3, 2)}))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "9171983c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'2495458656944_eq_2495458664912': tensor(1.6935),\n",
       " '2495458656944_eq_2495458664912_value': tensor([-1.6935]),\n",
       " '2495458656944_eq_2495458664912_violation': tensor([1.6935])}"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 4, Evaluate constraint on algebraic expression of variables\n",
    "# dataset dictionary with randomly sampled values for variables x and y\n",
    "data = {'x': torch.rand(1), 'y': torch.rand(1)}\n",
    "# and define new variable with initial value\n",
    "a = variable(torch.tensor([1.5]), display_name='a')\n",
    "# now we create new constraint on algebraic expression\n",
    "con_4 = (3*x + 1 - 0.5 * a)**2 == 2.0\n",
    "# and evaluate its aggregate violations on dataset with random variable x\n",
    "con_4(data)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "44d75f72",
   "metadata": {},
   "source": [
    "## Objective\n",
    "\n",
    "**Objective** is constructed via .minimize() method on instantiated Variable object.\n",
    "It could be also constructed as Objective(variable, metric) with metric being callable such as torch.mean."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "878bf338",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'x_<built-in method mean of type object at 0x00007FF933FDC560>': tensor(5.)}\n"
     ]
    }
   ],
   "source": [
    "# 1, create objective term by via minimize method of Variable\n",
    "obj_1 = variable('x').minimize()\n",
    "# Evaluate objective at a given value of variable\n",
    "print(obj_1({'x': torch.tensor(5.)}))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "04f90cb9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'2495458005424_<built-in method mean of type object at 0x00007FF933FDC560>': tensor(0.4045)}\n"
     ]
    }
   ],
   "source": [
    "# 2, minimize composite variable\n",
    "x, y = variable('x'), variable('y')\n",
    "f = (1 - x) ** 2 + (y - x ** 2) ** 2\n",
    "obj_2 = f.minimize()\n",
    "# Evaluate objective at a given value of variables\n",
    "data = {'x': torch.rand(2,3), 'y': torch.rand(2,3)}\n",
    "print(obj_2(data))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "8ec6191e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'2495458005424_<built-in method sum of type object at 0x00007FF933FDC560>': tensor(2.4271)}\n"
     ]
    }
   ],
   "source": [
    "# 3, change metric, weight, and name of the objective\n",
    "obj_3 = f.minimize(metric=torch.sum, weight=1.0, name='obj')\n",
    "# Evaluate objective at a given value of variables\n",
    "print(obj_3(data))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "38f97fac",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'2495458005424_<built-in method sum of type object at 0x00007FF933FDC560>': tensor(2.4271)}\n"
     ]
    }
   ],
   "source": [
    "# 4, create objective term via Objective interface: this is equivalent to case 3\n",
    "obj_4 = Objective(f, metric=torch.sum, weight=1.0, name='obj')\n",
    "# Evaluate objective at a given value of variables\n",
    "print(obj_4(data))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d04cdad3",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "neuromancer",
   "language": "python",
   "name": "neuromancer"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
